home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / progjrn / pj_6_6.arc / DSI020.ARC / GETTIM28.ASM < prev    next >
Assembly Source File  |  1988-07-28  |  2KB  |  93 lines

  1. ;    GETTIM.ASM
  2. ;
  3. ;    Author:        M. Steven Baker
  4. ;    Date:        July 29, 1988
  5. ;
  6. ;    GETTIM and GETDAT routines for SVS FORTRAN (only)
  7. ;    must be called with INTEGER*4 arguments
  8. ;
  9. ;    FORTRAN CODE TO RUN THIS:
  10. ;;    EXTERNAL GETTIM
  11. ;;    EXTERNAL GETDAT
  12. ;;    INTEGER IHR,IMIN,ISEC,IS100
  13. ;;    INTEGER IMON,IDAY,IYR
  14. ;;    CALL GETDAT(IYR,IMON,IDAY)
  15. ;;    CALL GETTIM(IHR,IMIN,ISEC,IS100)
  16. ;;    END
  17. ;
  18. ;    Written for the SVS assembler (ASM68K.E20)
  19. ;    by M. Steven Baker (Technical Editor -- Programmer's Journal)
  20. ;
  21. ;    note:    since dumb SVS assembler doesn't support
  22. ;        EXTB.L    D0
  23. ;    we use
  24. ;        ANDI    #$FF,D0
  25. ;        EXT.L    D0
  26. ;
  27. ;
  28. ;    NOTE:
  29. ;    USE WITH SVS VERSION 2.8 ONLY.  USE WITH SVS VERSION 2.6
  30. ;    REQUIRES THAT THE +e(?? C calling convention)
  31. ;    COMPILER SWITCH BE USED.
  32. ;
  33.     global    getdat,gettim
  34. ;
  35. ;    return date in MM/DD/YY format
  36. ;
  37. getdat    MOVEQ    #27,D0        ; GET DATE
  38.     TRAP    #14        ; D0=YYYY:MM:DD
  39.     MOVE.L    D0,D1        ; SAVE REGISTER
  40.     MOVE.L    8(SP),A0    ; GET POINTER TO ARGUMENT
  41.     ASR.W    #8,D0        ; SHIFT IN MONTH
  42.     EXT.L    D0        ; extend to a long word
  43.     MOVE.L    D0,(A0)        ; store month
  44. ;
  45.     MOVE.L    D1,D0        ; GET YEAR
  46.     SWAP    D0        ;   INTO LOW WORD
  47.     EXT.L    D0        ; extend to a long word
  48.     MOVE.L    4(SP),A0    ; GET POINTER TO ARGUMENT
  49.     MOVE.L    D0,(A0)        ; store year
  50. ;    
  51.     CLR.L    D0        ; clear register
  52.     MOVE.B    D1,D0        ; get day
  53.     MOVE.L    12(SP),A0    ; GET POINTER TO ARGUMENT
  54.     MOVE.L    D0,(A0)        ; store day
  55.     RTS            ; just return for 2.8
  56.  
  57. ;    RTD    #12        ; RETURN AND DEALLOCATE PARAMETERS for 2.6
  58. ;
  59. ;    return time in HH:MM:SS format
  60. ;
  61. gettim    MOVEQ    #28,D0        ; GET TIME
  62.     TRAP    #14        ; D0=HH:MM:SS:xx
  63.     MOVE.L    D0,D1        ; SAVE REGISTER
  64.     SWAP    D0        ; get hour to low word
  65.     ASR.W    #8,D0        ; SHIFT IN hour
  66.     EXT.L    D0        ; extend to a long word
  67.     MOVE.L    4(SP),A0    ; GET POINTER TO ARGUMENT
  68.     MOVE.L    D0,(A0)        ; store hour
  69. ;
  70.     MOVE.L    D1,D0        ; now get minutes
  71.     SWAP    D0        ;   INTO LOW WORD
  72.     ANDI    #$FF,D0        ; screen out all but low byte
  73.     EXT.L    D0        ; extend to a long word
  74.     MOVE.L    8(SP),A0    ; GET POINTER TO ARGUMENT
  75.     MOVE.L    D0,(A0)        ; store year
  76. ;    
  77.     MOVE.L    D1,D0        ; now get seconds
  78.     ASR.W    #8,D0        ; SHIFT seconds into low byte
  79.     EXT.L    D0        ; extend to a long word
  80.     MOVE.L    12(SP),A0    ; GET POINTER TO ARGUMENT
  81.     MOVE.L    D0,(A0)        ; store seconds
  82. ;
  83.     MOVE.L    D1,D0        ; now get 1/100 seconds
  84.     ANDI    #$FF,D0        ; screen out all but low byte
  85.     EXT.L    D0        ; extend to a long word
  86.     MOVE.L    16(SP),A0    ; GET POINTER TO ARGUMENT
  87.     MOVE.L    D0,(A0)        ; store 1/100 seconds
  88.     RTS            ; just return for 2.8
  89. ;
  90. ;    RTD    #16        ; return and deallocate for 2.6
  91. ;
  92.     END
  93.